import GameConfig from "./GameConfig";

(function(){
	Laya.isWXPosMsg = true; 
	Laya.isWXOpenDataContext = false; 

	Laya.init(GameConfig.width, GameConfig.height, Laya["WebGL"]);
	Laya.stage.scaleMode = GameConfig.scaleMode;
	Laya.stage.screenMode = GameConfig.screenMode;
	Laya.stage.alignV = GameConfig.alignV;
	Laya.stage.alignH = GameConfig.alignH;
	Laya.stage.bgColor = GameConfig.bgColor;

	// config
	var W = GameConfig.width;// 游戏场景宽度
	var H = GameConfig.height;// 游戏场景高度

	// 全局挂载体
	var gloabObj = {};

	// 公用类简写
	var Text  = Laya.Text;
	var Button  = Laya.Button;
	var Handler = Laya.Handler;
	var Sprite = Laya.Sprite;
	var Event = Laya.Event;
	var Tween = Laya.Tween;
	var Ease = Laya.Ease;
	var List = Laya.List;
	var Box = Laya.Box;
	var SoundManager = Laya.SoundManager;
	var WXOpenDataViewer = Laya.WXOpenDataViewer;
	var Animation = Laya.Animation;
	var wx = Laya.Browser.window.wx ? Laya.Browser.window.wx : null;

	// 成语题
	var TI=[
		{num:1,qa:['你','很','','的'],qb:['','不','错','的'],ans:"好",ans_arr:['好','和','那','偶']},
		{num:2,qa:['全','民','图',''],qb:['你','','个','这'],ans:"击",ans_arr:['有','和','击','偶']},
		{num:3,qa:['','二','三','四'],qb:['四','三','二',''],ans:"一",ans_arr:['好','和','一','偶']},
		{num:4,qa:['1','','3','2'],qb:['2','1','3',''],ans:"4",ans_arr:['有','和','击','4']},
		{num:5,qa:['y','','k','n'],qb:['l','o','','p'],ans:"b",ans_arr:['有','b','击','偶']},
		{num:6,qa:['','y','k','n'],qb:['l','o','','p'],ans:"c",ans_arr:['哈','c','击','偶']},
		{num:7,qa:['y','k','','n'],qb:['l','o','','p'],ans:"e",ans_arr:['有','2','e','偶']},
		{num:8,qa:['y','n','k',''],qb:['l','o','','p'],ans:"p",ans_arr:['有','5','击','p']},
		{num:9,qa:['','y','k','n'],qb:['l','o','','p'],ans:"t",ans_arr:['有','9','t','偶']},
		{num:10,qa:['y','n','o',''],qb:['l','o','','p'],ans:"a",ans_arr:['a','7','击','偶']}
	];
	// 成语题 位置
	var TI_index=1;

	// 图片资源预加载 数组
	var listImgs=[
		{url:"assets/imgs/back.png"},//https://img.ikstatic.cn/MTU0ODMwMDkzMzcwOCM4OTkjanBn.jpg
		{url:"assets/imgs/btn1.png"},
		{url:"assets/imgs/btn11.png"},
		{url:"assets/imgs/btn2.png"},
		{url:"assets/imgs/btn3.png"},
		{url:"assets/imgs/btn4.png"},
		{url:"assets/imgs/title.png"},
		{url:"assets/imgs/back2.png"}
	];

	// 图片资源预加载
	Laya.loader.load(listImgs,Handler.create(this,loaded));

	// 图片资源加载完成
	function loaded(){	
		// 场景底图
		gloabObj.backImg = new Sprite();	
		gloabObj.backImg.zOrder=1;
		Laya.stage.addChild(gloabObj.backImg);
		gloabObj.backImg.size(400,600);
		gloabObj.backImg.graphics.drawTexture(Laya.loader.getRes(listImgs[0].url),0,0);

		// 题号
		gloabObj.titleGame = createButton(listImgs[6].url,200,70,(W-200)/2,25,'');
		gloabObj.titleGame.zOrder=2;
		Laya.stage.addChild(gloabObj.titleGame);

		// 成语展示区域
		gloabObj.zoneGame = new Sprite();
		gloabObj.zoneGame.zOrder=2;
		Laya.stage.addChild(gloabObj.zoneGame);
		gloabObj.zoneGame.width=225;
		gloabObj.zoneGame.height=225;
		gloabObj.zoneGame.pivotX=gloabObj.zoneGame.width/2;
		gloabObj.zoneGame.pivotY=gloabObj.zoneGame.height/2;
		gloabObj.zoneGame.x=(W-gloabObj.zoneGame.width)/2+gloabObj.zoneGame.width/2;
		gloabObj.zoneGame.y=105+gloabObj.zoneGame.height/2;
		// 成语展示区域子元素
		gloabObj.zoneGameChilds=[];
		// 动效容器
		gloabObj.Tweener=null;

		// 答案选项锁
		gloabObj.isSelAnsBtn=true;

		// 成语答案
		gloabObj.ansGame = new Sprite();
		gloabObj.ansGame.zOrder=2;
		Laya.stage.addChild(gloabObj.ansGame);
		gloabObj.ansGame.width=345;
		gloabObj.ansGame.height=80;
		gloabObj.ansGame.x=(W-gloabObj.ansGame.width)/2;
		gloabObj.ansGame.y=455;
		// 成语答案区域子元素
		gloabObj.ansGameChilds=[];
		// 答案点击事件，委托处理
		gloabObj.ansGame.on(Event.CLICK, gloabObj.ansGame, onSelAns);

		// 排行榜
		gloabObj.cssRank=createButton(listImgs[3].url,80,40,20,365,'排行榜');
		gloabObj.cssRank.zOrder=2;
		Laya.stage.addChild(gloabObj.cssRank);
		gloabObj.cssRank.on(Event.CLICK, gloabObj.cssRank, onCssRank);

		// 获取答案
		gloabObj.cssGetAns=createButton(listImgs[4].url,180,40,110,365,'获取答案');
		gloabObj.cssGetAns.zOrder=2;
		Laya.stage.addChild(gloabObj.cssGetAns);
		gloabObj.cssGetAns.on(Event.CLICK, gloabObj.cssGetAns, onCssGetAns);

		// 分享
		gloabObj.cssShare=createButton(listImgs[5].url,80,40,305,365,'分享');
		gloabObj.cssShare.zOrder=2;
		Laya.stage.addChild(gloabObj.cssShare);
		gloabObj.cssShare.on(Event.CLICK, gloabObj.cssShare, onCssShare);

		// 题目内容
		gloabObj.objTi=TI[TI_index-1];
		// 题号
		setTitle();
		// 设置成语布局
		setCy();
		// 设置答案布局
		setAns();

		//场景图集动画
		gloabObj.imgsGame = new Animation();
		// 设置播放间隔（单位：毫秒）
		gloabObj.imgsGame.interval = 300;	
		//加载动画图集，加载成功后执行回调方法
		gloabObj.imgsGame.loadAtlas("assets/imgs/yu.atlas",Laya.Handler.create(this,imgsGameAnionLoaded));

		// 重玩 构建弹窗
		reGameDialog();

		// 微信开放数据展示组件
		initWXOpenDataViewer();
	};

	//加载动画图集，加载成功后执行回调方法
	function imgsGameAnionLoaded(){
		gloabObj.imgsGame.x=(W-200)/2;
		gloabObj.imgsGame.y=105;
		gloabObj.imgsGame.visible=false;
		//添加到舞台
		gloabObj.imgsGame.zOrder=3;
		Laya.stage.addChild(gloabObj.imgsGame);
	};
	//场景图集动画 播放
	function imgsGameAnionPlay(){
		gloabObj.imgsGame.visible=true;	
		//播放动画
		gloabObj.imgsGame.play();
	};
	//场景图集动画 停止
	function imgsGameAnionStop(){
		gloabObj.imgsGame.visible=false;
		//播放动画
		gloabObj.imgsGame.stop();
	};

	// 题号
	function setTitle(){
		gloabObj.titleGame.label=`第${gloabObj.objTi.num}题`;
	};

	// 设置成语布局
	// idth 50
	// margin 5
	function setCy(){
		// 成语展示区域删除子节点
		gloabObj.zoneGame.destroyChildren();
		// 成语展示区域子元素
		gloabObj.zoneGameChilds=[];
		// 动效容器
		gloabObj.Tweener?gloabObj.Tweener.clear():null;
		// 初始缩放
		gloabObj.zoneGame.scaleX=0;
		gloabObj.zoneGame.scaleY=0;
		// 依据空缺位置计算基础位置
		let qa_top=0;
		let qb_left=0;
		for(let i=0;i<gloabObj.objTi.qa.length;i++){
			if(gloabObj.objTi.qa[i]==''){
				qb_left=i;
				break;
			};
		};
		for(let i=0;i<gloabObj.objTi.qb.length;i++){
			if(gloabObj.objTi.qb[i]==''){
				qa_top=i;
				break;
			};
		};
		// 插入子元素
		for(let i=0;i<gloabObj.objTi.qa.length;i++){
			let skin=listImgs[1].url;
			if(gloabObj.objTi.qa[i]==''){
				skin=listImgs[2].url;
			};
			let child=createButton(skin,50,50,55*i+5,55*qa_top+5,gloabObj.objTi.qa[i]);
			if(gloabObj.objTi.qa[i]==''){
				// 题目空位标识
				child.kong=true;
			};
			gloabObj.zoneGameChilds.push(child);
			gloabObj.zoneGame.addChild(child);
		};
		for(let i=0;i<gloabObj.objTi.qb.length;i++){
			let skin=listImgs[1].url;
			if(gloabObj.objTi.qb[i]!=''){
				let child=createButton(skin,50,50,55*qb_left+5,55*i+5,gloabObj.objTi.qb[i]);
				gloabObj.zoneGameChilds.push(child);
				gloabObj.zoneGame.addChild(child);
			};
		};
		// 动效容器
		gloabObj.Tweener=Laya.Tween.to(gloabObj.zoneGame,{scaleX:1,scaleY:1},1000,Laya.Ease.elasticInOut,Handler.create(this,completeTweenerBig),0);
	};

	// 动效容器结束回调函数 放大
	function completeTweenerBig(){
		console.log("动效容器完成 放大");
		// 答案选项锁
		gloabObj.isSelAnsBtn=false;
	};
	// 动效容器结束回调函数 缩小
	function completeTweenerSmall(){
		console.log("动效容器完成 缩小");
		// 题目内容
		gloabObj.objTi=TI[TI_index-1];
		// 题号
		setTitle();
		// 设置成语布局
		setCy();
		// 设置答案布局
		setAns();
		//场景图集动画 停止
		imgsGameAnionStop();
	};

	// 下一题
	function nextCy(){
		gloabObj.Tweener=Laya.Tween.to(gloabObj.zoneGame,{scaleX:0,scaleY:0},1000,Laya.Ease.elasticInOut,Handler.create(this,completeTweenerSmall),1000);
		//场景图集动画 播放
		imgsGameAnionPlay();
	};

	// 设置答案布局
	function setAns(){
		// 成语展示区域删除子节点
		gloabObj.ansGame.destroyChildren();
		// 成语展示区域子元素
		gloabObj.ansGameChilds=[];
		// 插入子元素
		for(let i=0;i<gloabObj.objTi.ans_arr.length;i++){
			let skin=listImgs[1].url;
			let child=createButton(skin,80,80,85*i+5,0,gloabObj.objTi.ans_arr[i]);
			child.diy_val=gloabObj.objTi.ans_arr[i];
			child.visible=true;
			gloabObj.ansGameChilds.push(child);
			gloabObj.ansGame.addChild(child);
		};
	};

	// 随机化答案设置
	function randomAns(){
		let newAns=[gloabObj.objTi.ans,'2','3','4'];
		for(let i=0;i<gloabObj.ansGameChilds.length;i++){
			gloabObj.ansGameChilds[i].diy_val=newAns[i];
			gloabObj.ansGameChilds[i].visible=true;
			gloabObj.ansGameChilds[i].label=newAns[i];
		};
	};

	// 答案点击事件，委托处理 
	function onSelAns(e){
		console.log(e.target);
		// 点击到答案按钮上
		if(e.target.diy_val){
			// 答案选项锁
			if(gloabObj.isSelAnsBtn){
				console.log("答案选项锁=====锁定中");
				return false;
			};
			// 提交答案 ajax 
			submitAns(e.target.diy_val);
		};
	};

	// 提交答案 ajax 
	function submitAns(diy_val){
		console.log("用户选择答案",diy_val);
		// 答案选项锁
		gloabObj.isSelAnsBtn=true;
		// 选择答案项隐藏
		for(let i=0;i<gloabObj.ansGameChilds.length;i++){
			if(gloabObj.ansGameChilds[i].diy_val==diy_val){
				gloabObj.ansGameChilds[i].visible=false;
				break;
			}
		};
		// ajax
		setTimeout(()=>{
			// 回答正确
			if(diy_val == gloabObj.objTi.ans){
				console.log("回答正确");
				// 显示答案
				for(let i=0;i<gloabObj.zoneGameChilds.length;i++){
					// 题目空位标识
					if(gloabObj.zoneGameChilds[i].kong){
						gloabObj.zoneGameChilds[i].label=diy_val;
						break;
					};
				};
				// 回答正确音效
				onPlaySoundSucc();
				// 成语题 位置
				TI_index+=1;
				// 题目是否已经是最后一个
				if((TI_index-1) in TI){
					console.log("进入一下题");
				}else{
					console.log("已经是最后一题");
					if(wx){
						wx.showToast({
							title: '已经是最后一题',
							icon: 'none',
							duration: 1500
						});
					}else{
						console.log("使用微信Toast，非微信环境");
					};
					// 答案选项锁
					gloabObj.isSelAnsBtn=false;
					return false;
				};
				// 下一题
				nextCy();
			//回答失败	
			}else{
				console.log("回答失败");
				// 回答失败音效
				onPlaySoundErr();
				// 重玩 显示弹窗
				reGameDialogShow();
			};
			// 接口异常
			// 答案选项锁
			//gloabObj.isSelAnsBtn=false;

		},200);
	};

	// 回答正确音效
	function onPlaySoundSucc(e){
		console.log("回答正确音效");
		SoundManager.playMusic("assets/audios/succ.wav", 1, new Handler(this, onComplete),0);
	};
	// 回答失败音效
	function onPlaySoundErr(e){
		console.log("回答失败音效");
		SoundManager.playMusic("assets/audios/err.wav", 1, new Handler(this, onComplete),0);
	};
	function onComplete(){
		console.log("播放完成");
	};

	// 重玩 显示弹窗
	function reGameDialogShow(){
		gloabObj.reGame.visible=true;
	};
	// 重玩 隐藏弹窗
	function reGameDialogHide(){
		gloabObj.reGame.visible=false;
	};
	// 重玩 构建弹窗
	function reGameDialog(){
		gloabObj.reGame = new Sprite();
		gloabObj.reGame.zOrder=4;
		Laya.stage.addChild(gloabObj.reGame);
		gloabObj.reGame.visible=false;
		gloabObj.reGame.x=0;
		gloabObj.reGame.y=0;
		gloabObj.reGame.width=W;
		gloabObj.reGame.height=laya.utils.Browser.height;

		//背景
		let back = new Sprite();
		back.x=0;
		back.y=0;
		back.width=W;
		back.height=H;
		back.alpha=0.3;
		back.graphics.drawTexture(Laya.loader.getRes(listImgs[7].url),0,0,W,laya.utils.Browser.height);
		gloabObj.reGame.addChild(back);

		//描述
		let txt = new Text();
		//设置文本内容
		txt.text = "回答错误，可以点击重新游戏";
		//设置文本颜色
		txt.color = "#ffffff";
		txt.width = W;
		txt.height = 80;
		txt.align="center";
		txt.valign="middle";
		txt.fontSize=20;
		txt.x=0;
		txt.y=200;
		gloabObj.reGame.addChild(txt);

		//事件重新开始按钮
		let btn_rg=createButton(listImgs[4].url,180,40,110,300,"重新开始");
		gloabObj.reGame.addChild(btn_rg);
		btn_rg.on(Event.CLICK, btn_rg, onreGame);
	};
	// 重玩 重新开始
	function onreGame(){
		// 重玩 隐藏弹窗
		reGameDialogHide();
		// 随机化答案设置
		randomAns();
		// 答案选项锁
		gloabObj.isSelAnsBtn=false;
	};

	// 创建按钮
	function createButton(skin,width,height,x,y,label){
		var btn = new Button();
		btn.skin=skin;
		btn.labelSize=20;
		btn.label=label;
		btn.labelColors="#ffffff,#ffffff,#ffffff,#ffffff";
		btn.stateNum=1;
		btn.width=width;
		btn.height=height;
		btn.pos(x, y);
		return btn;
	};

	// 获取答案
	function onCssGetAns(){

	};
		
	// 分享
	function onCssShare(){
		if(wx){
			wx.shareAppMessage();
		}else{
			console.log("使用微信分享，非微信环境");
		};
	};

	// 排行榜
	function onCssRank(){
		if(gloabObj.WXOpenDataViewer){
			gloabObj.WXOpenDataViewer.postMsg({
				type:1,
				msg:"显示排行榜"
			});
			gloabObj.WXOpenDataViewer.visible = true;	
		};
	};

	// 微信开放数据展示组件
	function initWXOpenDataViewer(){
		gloabObj.WXOpenDataViewer = new WXOpenDataViewer();
		gloabObj.WXOpenDataViewer.zOrder=5;
		Laya.stage.addChild(gloabObj.WXOpenDataViewer);
		gloabObj.WXOpenDataViewer.width = W;
		gloabObj.WXOpenDataViewer.height = H;
		gloabObj.WXOpenDataViewer.x = 0;
		gloabObj.WXOpenDataViewer.y = 0;
		gloabObj.WXOpenDataViewer.visible = false;	
	};
})();